home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 48 / PC Gamer IT CD 48 2-2.iso / Starsiege / tribesdemo.exe / Disk1 / data1.cab / Tribes_Demo / base / scripts.vol / dm.cs < prev    next >
Encoding:
Text File  |  1999-09-14  |  12.6 KB  |  379 lines

  1. exec("game.cs");
  2. $MaxNumKills = 15;
  3. //Deathmatch mission script -Aug. 25 1998
  4.  
  5. //calc scores upon fraging
  6. function Game::clientKilled(%playerId, %killerId)
  7. {
  8.    if($teamplay)
  9.    {
  10.       if(%killerId == -1 || %playerId == -1)
  11.       {
  12.          return;
  13.       }
  14.       %kteam = Client::getTeam(%killerId);
  15.       %pteam = Client::getTeam(%playerId);
  16.       
  17.       if(%kteam == %pteam)
  18.          $teamScore[%kteam] = $teamScore[%kteam] - 1;
  19.       else
  20.          $teamScore[%kteam] = $teamScore[%kteam] - 1;
  21.       
  22.       DMTEAM::checkMissionObjectives();
  23.    }
  24.    else
  25.       DM::checkMissionObjectives(%killerId);
  26.    
  27. }
  28.  
  29. function Game::playerSpawned(%pl, %clientId, %armor)
  30. {      
  31.    // use this client's skin preference
  32.    Client::setSkin(%clientId, $Client::info[%clientId, 0]);
  33.  
  34.    //spawn with only blaster and health kit
  35.    Player::setItemCount(%clientId,$ArmorName[%armor],1);
  36.    Player::setItemCount(%clientId,Blaster,1);
  37.    Player::setItemCount(%clientId,RepairKit,1);
  38.     Player::useItem(%pl,Blaster);
  39.    
  40.    if($teamplay)
  41.    {
  42.       DMTEAM::checkMissionObjectives();
  43.       DMTEAM::echoScores();
  44.    }
  45. }
  46.  
  47. //Player has a total of 10 seconds per life allowed outside designated mission area.
  48. //After a player expends this 10 sec, the player is remotely killed.
  49. //-lesson to be learned= stay in the mission area!
  50. function Player::leaveMissionArea(%player)
  51. {
  52.    %cl = Player::getClient(%player);
  53.     Client::sendMessage(%cl,1,"You have left the mission area.");
  54.     %player.outArea=1;
  55.     alertPlayer(%player, 3);
  56. }
  57.  
  58. //checking for timeout of dieSeqCount
  59. function Player::checkLMATimeout(%player, %seqCount)
  60. {
  61.    echo("checking player timeout " @ %player @ " " @ %seqCount);
  62.    if(%player.dieSeqCount == %seqCount)
  63.       remoteKill(Player::getClient(%player));
  64. }
  65.  
  66. //called if player leaves mission area
  67. function Player::enterMissionArea(%player)
  68. {
  69.    %player.outArea="";
  70.    %player.dieSeqCount = 0;
  71.    %player.timeLeft = %player.timeLeft - (getSimTime() - %player.leaveTime);
  72. }
  73.   
  74. function alertPlayer(%player, %count)
  75. {
  76.     if(%player.outArea == 1) {
  77.         %clientId = Player::getClient(%player);
  78.           Client::sendMessage(%clientId,1,"~wLeftMissionArea.wav");
  79.         if(%count > 1)
  80.            schedule("alertPlayer(" @ %player @ ", " @ %count - 1 @ ");",1.5,%clientId);
  81.         else 
  82.            schedule("leaveMissionAreaDamage(" @ %clientId @ ");",1,%clientId);
  83.     }
  84. }
  85.  
  86. function leaveMissionAreaDamage(%client)
  87. {
  88.     %player = Client::getOwnedObject(%client);
  89.     if(%player.outArea == 1) {
  90.         if(!Player::isDead(%player)) {
  91.               Player::setDamageFlash(%client,0.1);
  92.             GameBase::setDamageLevel(%player,GameBase::getDamageLevel(%player) + 0.05);
  93.            schedule("leaveMissionAreaDamage(" @ %client @ ");",1);
  94.         }
  95.         else { 
  96.             playNextAnim(%client);    
  97.             Client::onKilled(%client, %client);
  98.         }
  99.     }
  100. }
  101.  
  102. function Game::checkTimeLimit()
  103. {
  104.    // if no timeLimit set or timeLimit set to 0,
  105.    // just reschedule the check for a minute hence
  106.    $timeLimitReached = false;
  107.  
  108.    if(!$Server::timeLimit)
  109.    {
  110.       schedule("Game::checkTimeLimit();", 60);
  111.       return;
  112.    }
  113.    %curTimeLeft = ($Server::timeLimit * 60) + $missionStartTime - getSimTime();
  114.    if(%curTimeLeft <= 0)
  115.    {
  116.       $timeLimitReached = true;
  117.       $timeReached = 1;
  118.         DM::missionObjectives();
  119.         Server::nextMission();
  120.     }
  121.    else
  122.    {
  123.       schedule("Game::checkTimeLimit();", 20);
  124.       UpdateClientTimes(%curTimeLeft);
  125.    }
  126. }
  127.  
  128. function Vote::changeMission()
  129. {
  130.     $timeLimitReached = true;
  131.    $timeReached = 1;
  132.     DM::missionObjectives();
  133. }
  134.   
  135. //---------------------------------------------------------------------------------------
  136. //
  137. //Free for all Deathmatch function definitions
  138. //
  139. //---------------------------------------------------------------------------------------
  140. function DM::checkMissionObjectives(%playerId) 
  141. {
  142.    if(DM::missionObjectives(%playerId)) 
  143.       schedule("nextMission();", 0);
  144.     if($DMScoreLimit > 0)
  145.         if((Player::getClient(%playerId)).scoreKills >= $DMScoreLimit) {
  146.           $timeLimitReached = true;
  147.           $timeReached = 1;
  148.             DM::missionObjectives();
  149.             Server::nextMission();
  150.         }
  151. }
  152.  
  153. function DM::missionObjectives()
  154. {
  155.     %numClients = getNumClients();
  156.     for(%i = 0 ; %i < %numClients ; %i++) 
  157.         %clientList[%i] = getClientByIndex(%i);
  158.     %doIt = 1;
  159.     while(%doIt == 1) {
  160.         %doIt = "";
  161.         for(%i= 0 ; %i < %numClients; %i++) {
  162.             if((%clientList[%i]).ratio < (%clientList[%i+1]).ratio) {
  163.                 %hold = %clientList[%i];
  164.                 %clientList[%i] = %clientList[%i+1];
  165.                 %clientList[%i+1]    = %hold;
  166.                 %doIt=1;
  167.             }
  168.         }
  169.     }
  170.    if(!$Server::timeLimit)
  171.       %str = "<f1>   - No time limit on the game.";
  172.    else if($timeLimitReached)
  173.       %str = "<f1>   - Time limit reached.";
  174.    else
  175.       %str = "<f1>   - Time remaining: " @ floor($Server::timeLimit - (getSimTime() - $missionStartTime) / 60) @ " minutes.";
  176.     for(%l = -1; %l < 1 ; %l++) {        
  177.         %lineNum = 0;
  178.         if($timeReached == "") {
  179.                Team::setObjective(%l, %lineNum, "<jc><B0,0:deathmatch1.bmp><B0,0:deathmatch2.bmp>");
  180.               Team::setObjective(%l, %lineNum++, "<f5>Mission Information:");
  181.             Team::setObjective(%l, %lineNum++, "<f1>   - Mission Name: " @ $missionName); 
  182.           Team::setObjective(%l, %lineNum++, %str);
  183.           Team::setObjective(%l, %lineNum++, " ");
  184.                Team::setObjective(%l, %lineNum++, "<f5>Mission Objectives:");
  185.                Team::setObjective(%l, %lineNum++, "<f1>   -Kill all other players!");
  186.                Team::setObjective(%l, %lineNum++, "<f1>   -Stay alive!");
  187.                Team::setObjective(%l, %lineNum++, "<f1>   -To have the highest Efficiency!");
  188.                Team::setObjective(%l, %lineNum++, "<f1>        -Efficiency is calculated once (Kills + Deaths) is greater than 4");
  189.                Team::setObjective(%l, %lineNum++, " ");
  190.                Team::setObjective(%l, %lineNum++, "<f1>Remember to stay within the mission area, which is defined by the extents of your commander screen map."    @ 
  191.                                           " If you go outside of the mission area you will have 3 seconds to get back into the mission area, or you'll start taking damage!");
  192.                Team::setObjective(%l, %lineNum++, " ");
  193.                Team::setObjective(%l, %lineNum++, " ");
  194.               Team::setObjective(%l, %lineNum++, "<f5>TOP PLAYERS ARE: " );
  195.                Team::setObjective(%l, %lineNum++, " ");
  196.                Team::setObjective(%l, %lineNum++, "<f1>Player Name<L30>Kills<L50>Deaths<L70>Efficiency");
  197.        }
  198.        else {
  199.             Team::setObjective(%l, %lineNum++, "<f5>Mission Summary:");
  200.                Team::setObjective(%l, %lineNum++, " " );
  201.                Team::setObjective(%l, %lineNum++, "<f1>     - The Best Player(s): " );
  202.             %i=0;
  203.             %TopRatio="";
  204.             while(%i < %numClients && %clientList[%i].ratio != 0 && (%TopRatio == "" || (%TopRatio ==  (%clientList[%i+1]).ratio && %TopRatio != 0) )) {
  205.                    Team::setObjective(%l, %lineNum++, "<L14><f5><Bskull_big.bmp>\n" @ Client::getName(%clientList[%i]) @ "<f1> with a ratio of <f5>" @ (%clientList[%i]).ratio @ ".0%");
  206.                 %TopRatio = (%clientList[%i]).ratio;
  207.                 %i++;
  208.             }
  209.             if(%i == 0) {
  210.                    Team::setObjective(%l, %lineNum++, "<L14><f1>NONE with a ratio greater than 0.0%");
  211.             }
  212.             Team::setObjective(%l, %lineNum++, " ");
  213.                Team::setObjective(%l, %lineNum++, " ");
  214.             Team::setObjective(%l, %lineNum++, "<f5>TOP PLAYERS ARE: " );
  215.                Team::setObjective(%l, %lineNum++, " ");
  216.             Team::setObjective(%l, %lineNum++, "<f1>Player Name<L30>Kills<L50>Deaths<L70>Efficiency");
  217.         }
  218.        //print out top 5 scores
  219.         %index = 0;
  220.         while(%index < %numClients && %clientList[%index].ratio != 0 && (%index < 5 || (%clientList[%index].ratio == %lastRatio && %lastRatio != 0))) {
  221.               %client = getClientByIndex(%count);
  222.              Team::setObjective(%l, %lineNum++,"<Bskull_small.bmp>" @ Client::getName(%clientList[%index]) @ " <L31>" @ (%clientList[%index]).scoreKills @ "<L53>" @ (%clientList[%index]).scoreDeaths @ "<L72>" @ (%clientList[%index]).ratio @ ".0%");
  223.             %lastRatio = (%clientList[%index]).ratio;
  224.             %index++;
  225.         }  
  226.         for(%s = %lineNum+1; %s < 30 ;%s++)
  227.             Team::setObjective(%l, %s, " ");
  228.     }
  229.     $timeReached="";
  230. }
  231.  
  232. //-----------------------------------------------------------------
  233. //
  234. //Team Deathmatch Function definitions
  235. // 
  236. //-----------------------------------------------------------------
  237. function DMTEAM::echoScores()
  238. {   
  239.      %score = getTeamName(0) @ ": " @ $teamScore[0];
  240.      
  241.      for(%i = 1; %i < $numTeams; %i = %i + 1)
  242.         %score = %score @ ", " @ getTeamName(%i) @ ": " @ $teamScore[%i];
  243.      
  244.      MessageAll(0, %score);
  245.      schedule("DMTEAM::echoScores();", 40);
  246. }
  247.  
  248. function DMTEAM::checkMissionObjectives()
  249. {
  250.    for(%p = 0; %p < $numTeams; %p = %p + 1) 
  251.    {
  252.       if(DMTEAM::teamMissionObjectives(%p))
  253.          schedule("Server::nextMission();", 0);
  254.    }
  255. }
  256.  
  257. function DMTEAM::teamMissionObjectives(%teamId)
  258. {
  259.    %numHighs = 0;
  260.    %teamName = getTeamName(%teamId);
  261.    %teamScore = $teamScore[%teamId];
  262.    %highScore = 0;
  263.   
  264.    for(%t = 0; %t < $numTeams; %t = %t + 1)
  265.    {
  266.        if(%teamScore > $teamScore[%t]) 
  267.        {
  268.           %highScore = %teamScore;
  269.           %numHighs = %numHighs + 1;
  270.        }
  271.        else if($teamScore[%t] > %highScore)
  272.        {
  273.           %highScore = $teamScore[%t];
  274.           %numHighs = %numHighs + 1;
  275.        }
  276.    }
  277.  
  278.    if(%highScore == $ScoreLimit)
  279.    {
  280.        for(%r = 0; %r < $numTeams; %r = %r + 1)
  281.        {
  282.           if(%teamScore == %highScore)
  283.              Team::setObjective(%teamId, 2, "~f0Your team is victorious!");
  284.           else if((%teamScore == %highScore) && (%numHighs > 1)) 
  285.              Team::setObjective(%teamId, 2, "~f0Your team ended up tied for the lead!");
  286.           else
  287.              Team::setObjective(%teamId, 2, "~f0Your team lost!"); 
  288.        }
  289.  
  290.        Team::setObjective(%teamId, 3, "\n");
  291.        //print out all team scores
  292.        %lnum = 4;
  293.        for(%q = 0; %q < $numTeams; %q = %q + 1) 
  294.        {
  295.              Team::setObjective(%teamId, %lnum, getTeamName(%q) @ ": " @ $teamScore[%q]);
  296.           %lnum = %lnum + 1;
  297.        }
  298.        return "True"; //change mission
  299.    }
  300.   
  301.    Team::setObjective(%teamId, 3, "\n");
  302.    Team::setObjective(%teamId, 4, "Mission Status:");                                                         
  303.    
  304.    
  305.    if((%teamScore == %highScore) && (%highScore == 0))
  306.       Team::setObjective(%teamId, 5, "~f0All teams tied at 0.");
  307.    else if((%teamScore == %highScore) && (%numHighs > 1)) 
  308.       Team::setObjective(%teamId, 5, "~f0Your team is Tied for the lead!");
  309.    else    if((%teamScore == %highScore) && (%numHighs == 1))
  310.       Team::setObjective(%teamId, 5, "~f0Your team is winning.");
  311.    else
  312.       Team::setObjective(%teamId, 5, "~f0Your team is losing.");
  313.    
  314.    
  315.    Team::setObjective(%teamId, 6, "\n");
  316.    Team::setObjective(%teamId, 7, "You must:");
  317.    Team::setObjective(%teamId, 8, "-Kill all players on all other teams.");
  318.    Team::setObjective(%teamId, 9, "-Stay alive!");
  319.    Team::setObjective(%teamId, 10, "\n");
  320.    Team::setObjective(%teamId, 11, "Remember to stay within the mission area, which is defined by the extents of your commander screen map."    @
  321.                                   " If you go outside of the mission area you will have 10 seconds to get back into the mission area, or you will be killed!");
  322.                                    
  323.    Team::setObjective(%teamId, 12, "\n");
  324.        //print out team scores
  325.        %lnum = 14;
  326.        Team::setObjective(%teamId, 13, "Team Scores");
  327.        for(%g = 0; %g < $numTeams; %g = %g + 1) 
  328.        {
  329.              Team::setObjective(%teamId, %lnum, getTeamName(%g) @ ": " @ $teamScore[%g]);
  330.           %lnum = %lnum + 1;
  331.        }
  332.  
  333.    return "False";
  334. }                                                
  335. function getEfficiencyRatio(%clientId)
  336. {
  337.     if((%clientId.scoreKills + %clientId.scoreDeaths) > 4) {
  338.         %ratio = floor((%clientId.scoreKills/(%clientId.scoreKills + %clientId.scoreDeaths))*100);        
  339.         return %ratio;
  340.     }
  341.     return "0";
  342. }
  343.  
  344. function Game::refreshClientScore(%clientId)
  345. {
  346.     %clientId.ratio = getEfficiencyRatio(%clientId);
  347.    if($teamplay)
  348.       Client::setScore(%clientId, "%n\t%t\t" @ %clientId.score  @ "\t%p\t%l", %clientId.score);
  349.    else
  350.       Client::setScore(%clientId, "%n\t " @ %clientId.scoreKills @ "\t  " @ %clientId.scoreDeaths @ "\t  " @ %clientId.ratio @ ".0%\t%p\t %l", %clientId.ratio);
  351.     DM::missionObjectives();
  352. }
  353.  
  354.  
  355. function Mission::init()
  356. {
  357.    setClientScoreHeading("Player Name\t\x78Team\t\xC8Score");
  358.  
  359.    $numTeams = getNumTeams();
  360.    for(%i = 0; %i < $numTeams; %i++)
  361.       $teamScore[%i] = 0;
  362.  
  363.    if($teamplay = !($numTeams == 1))
  364.    {
  365.       setTeamScoreHeading("Team Name\t\xC8Score");
  366.       setClientScoreHeading("Player Name\t\x78Team\t\xC8Score");
  367.    }
  368.    else
  369.    {
  370.       $SensorNetworkEnabled = false;
  371.       setTeamScoreHeading("");
  372.       setClientScoreHeading("Player Name\t\x55Kills\t\x75Deaths\t\xA5Efficiency\t\xE3Ping\t\xFFPL");
  373.    }
  374.    $dieSeqCount = 0;
  375.    //setup ai if any
  376.    AI::initSystem();
  377.     DM::missionObjectives();
  378. }
  379.